<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>const</title>
</head>
<body>

    <script>
/**
   const的作用域与let命令相同：
   只在声明所在的块级作用域内有效,声明的常量也是不提升,不可重复声明
 * 
*/

/**
 * const实际上保证的，并不是变量的值不得改动，而是变量指向的那个内存地址所保存的数据不得改动。
 * 对于简单类型的数据（数值、字符串、布尔值），值就保存在变量指向的那个内存地址，因此等同于常量。
 * 但对于复合类型的数据（主要是对象和数组），变量指向的内存地址，保存的只是一个指向实际数据的指针，
 * const只能保证这个指针是固定的（即总是指向另一个固定的地址），至于它指向的数据结构是不是可变的，就完全不能控制了
*/

// const num = 100;
// num = 200;//不能修改

// const arr =[1,2,3];
// arr[0] = 12;//可以修改对象本身
// arr=[5,6,7];//不能修改const修饰的变量的指向

//如果想让对象型数据的属性不被修改要是有Object.freeze()方法

let user ={
    num: 12
}

Object.freeze(user)//将对象进行冻结
user.num = 15;//无法修改对象的属性 严格模式下会报错
console.log(user.num);

    </script>
    
</body>
</html>